package com.qf.proxy.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author lwc
 * @date 2021/10/27 11:48
 * @Description ：基于JDK的动态代理类 可以代理任意对象
 */
public class JdkProxy  implements InvocationHandler {

    //真实对象
    private Object target;
    //把真实对象传进来 返回代理对象
    public  Object getTarget(Object target){
        this.target = target;

        //参数1 类加载器
        //参数2 被代理的 接口列表
        //参数3 InvocationHandler对象
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
    }

    //参数1 代理的实例
    //参数2 反射调用的方法
    //参数3 反射调用的参数列表
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("准备");

        //通过反射 调用真实对象的方法
        Object result = method.invoke(target, args);
        System.out.println("结束");
        return result;
    }
}
